﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_Salaries : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }

    protected void BindData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                List<SalaryLevel> listSalar = db.SalaryLevels.ToList<SalaryLevel>();
                listSalar.Sort((new SortObjectsSalary()).Compare);

                StoreSalaries.DataSource = listSalar;
                StoreSalaries.DataBind();

                gridPanelSalaries.ActiveIndex = -1;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo hệ thống", "Hệ thống đang bận, hảy thử lại sau").Show();
        }
    }

    protected void StoreSalaries_ReadData(object sender, StoreReadDataEventArgs e)
    {
        BindData();
    }

    protected void RowSelected(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = gridPanelSalaries.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow != null)
                {
                    int SalariesID = Int32.Parse(rsm.SelectedRow.RecordID);
                    SalaryLevel salar = db.SalaryLevels.Single(s => s.SaLevID == SalariesID);

                    lblViewSaLevID.Text = salar.SaLevID.ToString();
                    lblViewCode.Text = salar.Code;
                    lblViewNameOfSalary.Text = salar.NameOfSalary;
                    lblViewLevelSalary.Text = salar.LevelSalary;
                    lblViewNumberSalary.Text = salar.NumberSalary;
                    lblViewDescriptons.Text = salar.Descriptons;
                    chkViewStatusStatusOfLevel.Checked = Boolean.Parse(salar.StatusOfLevel.ToString());
                }
                else
                {
                    ResetControls_ViewInfor();
                    return;
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo hệ thống", "Hệ thống đang bận, hảy thử lại sau").Show();
        }
    }

    protected void btnToobarAdd_DirectClick(object sender, EventArgs e)
    {
        ResetControls_windowAddSalaries();
        windowAddSalaries.Show();
    }

    protected void btnAdd_DirectClick(object sender, EventArgs e)
    {
        try
        {
            if (txtFormAddCode.Text.Trim().Length == 0)
            {
                lblFormAddMsg.Text = "Mã công chức không được bỏ trống";
                txtFormAddCode.Focus(true, 100);
                return;
            }
            if (txtFormAddNameOfSalary.Text.Trim().Length == 0)
            {
                lblFormAddMsg.Text = "Ngạch công chức không được bỏ trống";
                txtFormAddNameOfSalary.Focus(true, 100);
                return;
            }
            if (txtFormAddLevelSalary.Text.Trim().Length == 0)
            {
                lblFormAddMsg.Text = "Bậc lương không được bỏ trống";
                txtFormAddLevelSalary.Focus(true, 100);
                return;
            }

            if (txtFormAddNumberSalary.Text.Trim().Length == 0)
            {
                lblFormAddMsg.Text = "Hệ số lương không được bỏ trống";
                txtFormAddNumberSalary.Focus(true, 100);
                return;
            }
            if (txtFormAddDescriptons.Text.Trim().Length == 0)
            {
                lblFormAddMsg.Text = "Mô tả không được bỏ trống";
                txtFormAddDescriptons.Focus(true, 100);
                return;
            }
            lblFormAddMsg.Text = "";

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                foreach (var item in db.SalaryLevels)
                {
                    if (txtFormAddCode.Text.Trim().Equals(item.Code))
                    {
                        lblFormAddMsg.Text = "Mã hệ số lương đã tồn tại, hảy nhập lại";
                        txtFormAddCode.Focus(true, 0);
                        return;
                    }
                }

                SalaryLevel salary = new SalaryLevel()
                {
                    Code = txtFormAddCode.Text.Trim(),
                    NameOfSalary = txtFormAddNameOfSalary.Text.Trim(),
                    NumberSalary = txtFormAddNumberSalary.Text.Trim(),
                    LevelSalary = txtFormAddLevelSalary.Text.Trim(),
                    Descriptons = txtFormAddDescriptons.Text.Trim(),
                    StatusOfLevel = chkFormAddStatusOfLevel.Checked
                };

                db.SalaryLevels.Add(salary);
                db.SaveChanges();

                windowAddSalaries.Hidden = true;
                windowAddSalaries.Dispose();
                ResetControls_windowAddSalaries();
                BindData();
                X.Msg.Alert("Thông báo hệ thống", "Thêm mới hệ số lương thành công").Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo hệ thống", "Hệ thống đang bận, hảy thử lại sau").Show();
        }
    }

    protected void btnAddCancel_DirectClick(object sender, EventArgs e)
    {
        windowAddSalaries.Hidden = true;
        windowAddSalaries.Dispose();
    }

    protected void btnToobarUpdate_DirectClick(object sender, EventArgs e)
    {

        RowSelectionModel rms = gridPanelSalaries.SelectionModel.Primary as RowSelectionModel;
        if (rms.SelectedRow != null)
        {
            windowUpdateSalaries.Show();

            int salaryIDSelected = Int32.Parse(rms.SelectedRow.RecordID);
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                SalaryLevel slSelected = db.SalaryLevels.SingleOrDefault(s => s.SaLevID == salaryIDSelected);

                txtFormUpdateCode.Text = slSelected.Code;
                txtFormUpdateNameOfSalary.Text = slSelected.NameOfSalary;
                txtFormUpdateLevelSalary.Text = slSelected.LevelSalary;
                txtFormUpdateNumberSalary.Text = slSelected.NumberSalary;
                txtFormUpdateDescriptons.Text = slSelected.Descriptons;
                chkFormUpdateStatusOfLevel.Checked = Boolean.Parse(slSelected.StatusOfLevel.ToString());
            }
        }
        else
        {
            windowUpdateSalaries.Hidden = true;
            windowUpdateSalaries.Dispose();
            X.Msg.Alert("Thông báo", "Bạn chưa chọn bản ghi để cập nhật").Show();
        }
    }

    protected void btnUpdate_DirectClick(object sender, EventArgs e)
    {
        try
        {
            if (txtFormUpdateCode.Text.Trim().Length == 0)
            {
                lblFormUpdateMsg.Text = "Mã công chức không được để trống";
                txtFormUpdateCode.Focus(true, 100);
            }
            if (txtFormUpdateNameOfSalary.Text.Trim().Length == 0)
            {
                lblFormUpdateMsg.Text = "Ngạch công chức không được để trống";
                txtFormUpdateNameOfSalary.Focus(true, 100);
            }
            if (txtFormUpdateLevelSalary.Text.Trim().Length == 0)
            {
                lblFormUpdateMsg.Text = "Bậc lương không được để trống";
                txtFormUpdateLevelSalary.Focus(true, 100);
            }
            if (txtFormUpdateNumberSalary.Text.Trim().Length == 0)
            {
                lblFormUpdateMsg.Text = "Hệ số bậc lương không được để trống";
                txtFormUpdateNumberSalary.Focus(true, 100);
            }
            if (txtFormUpdateDescriptons.Text.Trim().Length == 0)
            {
                lblFormUpdateMsg.Text = "Mô tả bậc lương không được để trống";
                txtFormUpdateDescriptons.Focus(true, 100);
            }
            lblFormUpdateMsg.Text = "";

            RowSelectionModel rms = gridPanelSalaries.SelectionModel.Primary as RowSelectionModel;
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int salarID = Int32.Parse(rms.SelectedRow.RecordID);
                SalaryLevel salary = db.SalaryLevels.Single(s => s.SaLevID == salarID);
                String codeUpdate = txtFormUpdateCode.Text.Trim();
                foreach (var item in db.SalaryLevels)
                {
                    if (item.Code.Equals(codeUpdate.ToLower()) && !item.Code.Equals(salary.Code))
                    {
                        lblFormUpdateMsg.Text = "Mã đã tồn tại, hãy nhập mã mới.";
                        txtFormUpdateCode.Focus(true, 100);
                        return;
                    }
                }

                salary.Code = txtFormUpdateCode.Text.Trim();
                salary.NameOfSalary = txtFormUpdateNameOfSalary.Text.Trim();
                salary.LevelSalary = txtFormUpdateLevelSalary.Text.Trim();
                salary.NumberSalary = txtFormUpdateNumberSalary.Text.Trim();
                salary.Descriptons = txtFormUpdateDescriptons.Text.Trim();
                salary.StatusOfLevel = chkFormUpdateStatusOfLevel.Checked;

                db.SaveChanges();


                windowUpdateSalaries.Hidden = true;
                windowUpdateSalaries.Dispose();
                ResetControls_windowUpdateSalaries();
                BindData();
                X.Msg.Alert("Thông báo hệ thống", "Cập nhật hệ số lương thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo hệ thống", "Hệ thống đang bận, hảy thử lại sau").Show();
        }
    }

    protected void btnUpdateCancel_DirectClick(object sender, EventArgs e)
    {
        windowUpdateSalaries.Hidden = true;
        windowUpdateSalaries.Dispose();
    }

    protected void btnToobarDelete_DirectClick(object sender, EventArgs e)
    {
        try
        {
            RowSelectionModel rms = gridPanelSalaries.SelectionModel.Primary as RowSelectionModel;
            if (rms.SelectedRow != null)
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    int salaryIDDelete = Int32.Parse(rms.SelectedRow.RecordID);
                    SalaryLevel SalaryDelete = db.SalaryLevels.Single(p => p.SaLevID == salaryIDDelete);
                    X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa bậc lương đã chọn ? [{0}]", SalaryDelete.NameOfSalary),
                    new MessageBoxButtonsConfig()
                    {
                        Yes = new MessageBoxButtonConfig
                        {
                            Text = "Xóa",
                            Handler = "App.direct.DoYes_DeleteSalaryLevel();"
                        },
                        No = new MessageBoxButtonConfig
                        {
                            Text = "Hủy bỏ"
                        }
                    }).Show();
                }
            }
            else
            {
                X.Msg.Alert("Thông báo", "Bạn chưa chọn bản ghi để xóa thông tin").Show();
                return;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteSalaryLevel()
    {
        try
        {
            RowSelectionModel rsm = gridPanelSalaries.SelectionModel.Primary as RowSelectionModel;
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int salaryIDSelectedDelete = Int32.Parse(rsm.SelectedRow.RecordID);
                SalaryLevel salaryDelete = db.SalaryLevels.Single(q => q.SaLevID == salaryIDSelectedDelete);

                db.SalaryLevels.Remove(salaryDelete);
                db.SaveChanges();

                BindData();
                ResetControls_ViewInfor();
                X.Msg.Alert("Thông báo", "Xóa bậc lương của cán bộ nhân viên thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }
    }

    protected void ResetControls_windowAddSalaries()
    {
        txtFormAddCode.Text = "";
        txtFormAddDescriptons.Text = "";
        txtFormAddLevelSalary.Text = "";
        txtFormAddNameOfSalary.Text = "";
        txtFormAddNumberSalary.Text = "";
        chkFormAddStatusOfLevel.Checked = false;
    }

    protected void ResetControls_windowUpdateSalaries()
    {
        txtFormUpdateCode.Text = "";
        txtFormUpdateDescriptons.Text = "";
        txtFormUpdateLevelSalary.Text = "";
        txtFormUpdateNameOfSalary.Text = "";
        txtFormUpdateNumberSalary.Text = "";
        chkFormUpdateStatusOfLevel.Checked = false;
    }

    protected void ResetControls_ViewInfor()
    {
        lblViewSaLevID.Text = "";
        lblViewCode.Text = "";
        lblViewNameOfSalary.Text = "";
        lblViewNumberSalary.Text = "";
        lblViewDescriptons.Text = "";
        chkViewStatusStatusOfLevel.Checked = false;
    }
}